import store from "@/store";
/*
	el：当前指令绑定的DOM
	binding：当前指令上传递过来的数据
*/
function checkPermission(el, binding) {
    // 获取绑定的值，此处为权限
    const { value } = binding;
    // 获取所有的功能指令
    const points = store.getters.userInfo.permission.points;
    // 当传入的指令集为数组时
    if (value && value instanceof Array) {
        // 匹配对应的指令
        const hasPermission = points.some((point) => {
            return value.includes(point);
        });
        // 如果无法匹配，则表示当前用户无该指令，那么删除对应的功能按钮
        if (!hasPermission) {
            el.parentNode && el.parentNode.removeChild(el);
        }
    } else {
        // 否则就对外抛出错误，v-permission value 必须是 ["admin","editor"]这种格式的
        // eslint-disabled-next-line
        throw new Error('v-permission value is ["admin","editor"]');
    }
}

export default {
    // 在绑定元素的父组件被挂载后调用
    mounted(el, binding) {
        checkPermission(el, binding);
    },
    // 在包含组件的 VNode 及其子组件的 VNode 更新后调用
    update(el, binding) {
        checkPermission(el, binding);
    }
};